package org.dtp.enums;

/**
 * 阻塞队列枚举
 *
 * @author wangyiqi
 */
public enum BlockQueueEnum {

    /**
     * 基于数组结构的有界阻塞队列
     */
    ARRAY_BLOCKING_QUEUE("ArrayBlockingQueue"),
    /**
     * 基于链表结构的无界阻塞队列
     */
    LINKED_BLOCKING_QUEUE("LinkedBlockingQueue"),
    /**
     * 基于优先级排序的无界阻塞队列
     */
    PRIORITY_BLOCKING_QUEUE("PriorityBlockingQueue"),
    /**
     * 基于优先级（启动时间）队列的无界阻塞队列
     */
    DELAY_QUEUE("DelayQueue"),
    /**
     * 不存储元素的阻塞队列
     */
    SYNCHRONOUS_QUEUE("SynchronousQueue"),
    /**
     * 基于链表结构的无界阻塞队列
     */
    LINKED_TRANSFER_DEQUE("LinkedTransferQueue"),
    /**
     * 基于链表结构的双向阻塞队列
     */
    LINKED_BLOCKING_DEQUE("LinkedBlockingDeque");

    BlockQueueEnum(String type) {
        this.type = type;
    }

    private final String type;

    public String type() {
        return this.type;
    }

    public static BlockQueueEnum find(String type) {
        for (BlockQueueEnum value : BlockQueueEnum.values()) {
            if (value.type.equals(type)) {
                return value;
            }
        }
        return null;
    }
}
